/**
 * PageTable预处理器
 */
 import { d } from './table.js'

 let preHandler = function() {}

/**
 * selector处理,解析下拉数据或从接口中获取
 * @param vm 当前dom对象
 * @param item 当前字段信息
 */
 preHandler.selector = function(vm, item) {
   window.vm = vm
   let labelField = item.dataTitle?item.dataTitle:'dictLabel'
   let valueField = item.dataValue?item.dataValue:'dictValue'
   // 更新formater方法
   const updateFormater = function(list) {
     if (!list) {
       return
     }
     const dicmap = d.arrToMap(list, valueField)
     const formater = function(data) {
       if (!data) {
         return ''
       }
       if (item.multi) {
         const vals = data.split(',')
         const result = []
         for (const val of vals) {
           let v = dicmap.get(val)
           if (item.dataValType === 'number') {
             v = dicmap.get(parseInt(val))
           }
           if (v && v[labelField]) { result.push(v[[labelField]]) }
         }
         return result.join(',')
       } else {
         const obj = dicmap.get(data)
         if (!obj || !obj[labelField]) {
           return ''
         }
         return obj[labelField] || ''
       }
     }
     vm.$set(item, 'formater', formater)
     vm.$set(item, 'dropdownList', list)
     try {
       if (vm.editor.fieldInfo.field === item.field) {
         vm.editor.list = list
       }
     } catch (e) {}
   }
   // 如果是分页模式，将不接受multi多选属性
   if (item.page) {
     item.multi = false
   }
   // 如果存在url就自动做后台异步处理
   if (item.url) {
     vm.getSelectData(item.url, function(arr) {
       item.dataTitle = labelField
       item.dataValue = valueField
       updateFormater(arr)
     })
   } else if (!item.formater) {
     // 如果没有自定义formater就默认用dataTitle和dataValue配合数据列表自动格式化
     updateFormater(item.dropdownList)
   }
   // 如果有配置异步加载方法就使用异步方法更新dropdownList和formater
   if (item.loadAll) {
     item.loadAll(datas => {
       updateFormater(datas)
     })
   }
 }

/**
 * 树形下拉框处理,解析下拉数据或从接口中获取
 * @param vm
 * @param item
 */
 preHandler.tree = function(vm, item) {
   let labelField = item.dataTitle?item.dataTitle:'label'
   let valueField = item.dataValue?item.dataValue:'id'
   let childrenField = item.dataChildren?item.dataChildren:'children'
   let treeData
   if (item.url) {
     vm.getSelectData(item.url, function(arr) {
       treeData=arr
     })
   }else if (item.dropdownList){
     treeData=item.dropdownList
   }
   if(treeData){
     item.treeData = treeData
     const dicMap = d.treeArrToMap(treeData, childrenField, labelField, valueField)
     const formater = function(data, row) {
       if (data === null || data === undefined) {
         return ''
       }
       const obj = dicMap.get(data)
       return obj || ''
     }
     vm.$set(item, 'formater', formater)
     vm.$nextTick(() => {
       vm.$forceUpdate()
     })
   }
 }

/**
 * 数字类型处理
 * @param vm
 * @param item
 */
 preHandler.number = function(vm, item) {
   if (item.decimal === 0) {
     item.decimal = 0
   } else {
     item.decimal = item.decimal || 0
   }
   if (!item.formater) {
     item.formater = function(data, row) {
       if (!data) {
         return
       }
       let n = item.decimalColumn ? row[item.decimalColumn] : item.decimal
       n = n ? parseInt(n) : 0
       data = Math.round(data * Math.pow(10, n)) / Math.pow(10, n)
       let resultStr = String(data)
       if (n > 0) {
         let index
         if (resultStr.indexOf('.') == -1) {
            // resultStr = resultStr.substr(0, index + item.decimal + 1)
            index = n
            resultStr += '.'
         } else {
           index = n - ((resultStr.length - 1) - resultStr.indexOf('.'))
         }
         let _zero = ''
         for (let i = 0; i < index; i++) {
           _zero += '0'
         }
         resultStr = resultStr + _zero
       }
       return resultStr
     }
   }
 }

/**
 * 点击类型处理
 * @param vm
 * @param item
 */
 preHandler.click = function(vm, item) {
   if (!item.style) {
     item.style = function() {
       return 'cursor: pointer;'
     }
   }
 }

 export {
     preHandler
 }
